// api/user.js - 用户相关接口
import request from './request.js';
import { setUserInfo, setPoints } from '../utils/storage.js';

/**
 * 用户相关API
 */
export const userApi = {
  /**
   * 获取用户信息
   * @returns {Promise}
   */
  async getUserInfo() {
    try {
      const res = await request.get('/user/info');
      // 更新本地用户信息
      if (res.data?.userInfo) {
        setUserInfo(res.data.userInfo);
      }
      return res.data;
    } catch (error) {
      console.error('获取用户信息失败:', error);
      throw error;
    }
  },

  /**
   * 微信登录
   * @param {string} code - 微信登录code
   * @returns {Promise}
   */
  async wxLogin(code) {
    try {
      const res = await request.post('/auth/wx-login', { code });
      return res.data;
    } catch (error) {
      console.error('微信登录失败:', error);
      throw error;
    }
  },

  /**
   * 手机号登录
   * @param {string} phone - 手机号
   * @param {string} code - 验证码
   * @returns {Promise}
   */
  async phoneLogin(phone, code) {
    try {
      const res = await request.post('/auth/phone-login', { phone, code });
      return res.data;
    } catch (error) {
      console.error('手机号登录失败:', error);
      throw error;
    }
  },

  /**
   * 获取积分记录
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.pageSize - 每页数量
   * @param {string} params.type - 类型（income支出/outcome收入）
   * @returns {Promise}
   */
  async getPointsRecords(params = {}) {
    try {
      const defaultParams = {
        page: 1,
        pageSize: 10,
        type: '' // 可选：income, expense, all
      };
      
      const queryParams = { ...defaultParams, ...params };
      const res = await request.get('/points/records', queryParams);
      return res.data;
    } catch (error) {
      console.error('获取积分记录失败:', error);
      throw error;
    }
  },

  /**
   * 获取用户总积分
   * @returns {Promise}
   */
  async getUserPoints() {
    try {
      const res = await request.get('/user/points');
      // 更新本地积分
      if (res.data?.points !== undefined) {
        setPoints(res.data.points);
      }
      return res.data;
    } catch (error) {
      console.error('获取用户积分失败:', error);
      throw error;
    }
  },

  /**
   * 积分兑换
   * @param {string} rewardId - 奖励ID
   * @param {number} count - 兑换数量
   * @returns {Promise}
   */
  async exchangePoints(rewardId, count = 1) {
    try {
      const res = await request.post('/user/points/exchange', { rewardId, count });
      // 更新本地积分
      if (res.data?.points !== undefined) {
        setPoints(res.data.points);
      }
      return res.data;
    } catch (error) {
      console.error('积分兑换失败:', error);
      throw error;
    }
  },

  /**
   * 获取排行榜
   * @returns {Promise}
   */
  async getRankingList() {
    try {
      const res = await request.get('/ranking/list');
      return res.data;
    } catch (error) {
      console.error('获取排行榜失败:', error);
      throw error;
    }
  },

  /**
   * 更新用户资料
   * @param {Object} data - 用户资料
   * @returns {Promise}
   */
  async updateUserProfile(data) {
    try {
      const res = await request.put('/user/profile', data);
      // 更新本地用户信息
      if (res.data?.userInfo) {
        setUserInfo(res.data.userInfo);
      }
      return res.data;
    } catch (error) {
      console.error('更新用户资料失败:', error);
      throw error;
    }
  }
};

export default userApi;